//
//  PKJavaScriptParser.h
//  ParseKit
//
//  Created by Todd Ditchendorf on 3/17/09.
//  Copyright 2009 Todd Ditchendorf. All rights reserved.
//

#import <ParseKit/ParseKit.h>

@interface TDJavaScriptParser : PKRepetition {
    PKCollectionParser *assignmentOpParser;
    PKCollectionParser *relationalOpParser;
    PKCollectionParser *equalityOpParser;
    PKCollectionParser *shiftOpParser;
    PKCollectionParser *incrementOpParser;
    PKCollectionParser *unaryOpParser;
    PKCollectionParser *multiplicativeOpParser;
    
    PKCollectionParser *programParser;
    PKCollectionParser *elementParser;
    PKCollectionParser *funcParser;
    PKCollectionParser *paramListOptParser;
    PKCollectionParser *paramListParser;
    PKCollectionParser *commaIdentifierParser;
    PKCollectionParser *compoundStmtParser;
    PKCollectionParser *stmtsParser;
    PKCollectionParser *stmtParser;
    PKCollectionParser *ifStmtParser;
    PKCollectionParser *ifElseStmtParser;
    PKCollectionParser *whileStmtParser;
    PKCollectionParser *forParenStmtParser;
    PKCollectionParser *forBeginStmtParser;
    PKCollectionParser *forInStmtParser;
    PKCollectionParser *breakStmtParser;
    PKCollectionParser *continueStmtParser;
    PKCollectionParser *withStmtParser;
    PKCollectionParser *returnStmtParser;
    PKCollectionParser *variablesOrExprStmtParser;
    PKCollectionParser *conditionParser;
    PKCollectionParser *forParenParser;
    PKCollectionParser *forBeginParser;
    PKCollectionParser *variablesOrExprParser;
    PKCollectionParser *varVariablesParser;
    PKCollectionParser *variablesParser;
    PKCollectionParser *commaVariableParser;
    PKCollectionParser *variableParser;
    PKCollectionParser *assignmentParser;
    PKCollectionParser *exprOptParser;
    PKCollectionParser *exprParser;
    PKCollectionParser *commaAssignmentExprParser;
    PKCollectionParser *assignmentExprParser;
    PKCollectionParser *assignmentOpConditionalExprParser;
    PKCollectionParser *conditionalExprParser;
    PKCollectionParser *ternaryExprParser;
    PKCollectionParser *orExprParser;
    PKCollectionParser *orAndExprParser;
    PKCollectionParser *andExprParser;
    PKCollectionParser *andBitwiseOrExprParser;
    PKCollectionParser *bitwiseOrExprParser;
    PKCollectionParser *pipeBitwiseXorExprParser;
    PKCollectionParser *bitwiseXorExprParser;
    PKCollectionParser *caretBitwiseAndExprParser;
    PKCollectionParser *bitwiseAndExprParser;
    PKCollectionParser *ampEqualityExprParser;
    PKCollectionParser *equalityExprParser;
    PKCollectionParser *equalityOpRelationalExprParser;
    PKCollectionParser *relationalExprParser;
    PKCollectionParser *relationalOpShiftExprParser;
    PKCollectionParser *shiftExprParser;
    PKCollectionParser *shiftOpAdditiveExprParser;
    PKCollectionParser *additiveExprParser;
    PKCollectionParser *plusOrMinusExprParser;
    PKCollectionParser *plusExprParser;
    PKCollectionParser *minusExprParser;
    PKCollectionParser *multiplicativeExprParser;
    PKCollectionParser *multiplicativeOpUnaryExprParser;
    PKCollectionParser *unaryExprParser;
    PKCollectionParser *unaryExpr1Parser;
    PKCollectionParser *unaryExpr2Parser;
    PKCollectionParser *unaryExpr3Parser;
    PKCollectionParser *unaryExpr4Parser;
    PKCollectionParser *unaryExpr5Parser;
    PKCollectionParser *unaryExpr6Parser;
    PKCollectionParser *constructorCallParser;
    PKCollectionParser *parenArgListOptParenParser;
    PKCollectionParser *memberExprParser;
    PKCollectionParser *memberExprExtParser;
    PKCollectionParser *dotMemberExprParser;
    PKCollectionParser *bracketMemberExprParser;
    PKCollectionParser *argListOptParser;
    PKCollectionParser *argListParser;
    PKCollectionParser *primaryExprParser;
    PKCollectionParser *parenExprParenParser;

    PKCollectionParser *funcLiteralParser;
    PKCollectionParser *arrayLiteralParser;
    PKCollectionParser *objectLiteralParser;

    PKParser *identifierParser;    
    PKParser *stringParser;
    PKParser *numberParser;
        
    // keywords
    PKParser *ifParser;
    PKParser *elseParser;
    PKParser *whileParser;
    PKParser *forParser;
    PKParser *inParser;
    PKParser *breakParser;
    PKParser *continueParser;
    PKParser *withParser;
    PKParser *returnParser;
    PKParser *varParser;
    PKParser *deleteParser;
    PKParser *newParser;
    PKParser *thisParser;
    PKParser *falseParser;
    PKParser *trueParser;
    PKParser *nullParser;
    PKParser *undefinedParser;
    PKParser *voidParser;
    PKParser *typeofParser;
    PKParser *instanceofParser;
    PKParser *functionParser;

    // multi-char symbols
    PKParser *orParser;
    PKParser *andParser;
    PKParser *neParser;
    PKParser *isNotParser;
    PKParser *eqParser;
    PKParser *isParser;
    PKParser *leParser;
    PKParser *geParser;
    PKParser *plusPlusParser;
    PKParser *minusMinusParser;
    PKParser *plusEqParser;
    PKParser *minusEqParser;
    PKParser *timesEqParser;
    PKParser *divEqParser;
    PKParser *modEqParser;
    PKParser *shiftLeftParser;
    PKParser *shiftRightParser;
    PKParser *shiftRightExtParser;
    PKParser *shiftLeftEqParser;
    PKParser *shiftRightEqParser;
    PKParser *shiftRightExtEqParser;
    PKParser *andEqParser;
    PKParser *xorEqParser;
    PKParser *orEqParser;
    
    // single char symbols
    PKParser *openCurlyParser;
    PKParser *closeCurlyParser;
    PKParser *openParenParser;
    PKParser *closeParenParser;
    PKParser *openBracketParser;
    PKParser *closeBracketParser;
    PKParser *commaParser;
    PKParser *dotParser;
    PKParser *semiOptParser;
    PKParser *semiParser;
    PKParser *colonParser;
    PKParser *equalsParser;
    PKParser *notParser;
    PKParser *ltParser;
    PKParser *gtParser;
    PKParser *ampParser;
    PKParser *pipeParser;
    PKParser *caretParser;
    PKParser *tildeParser;
    PKParser *questionParser;
    PKParser *plusParser;
    PKParser *minusParser;
    PKParser *timesParser;
    PKParser *divParser;
    PKParser *modParser;
}
@property (nonatomic, retain) PKCollectionParser *assignmentOpParser;
@property (nonatomic, retain) PKCollectionParser *relationalOpParser;
@property (nonatomic, retain) PKCollectionParser *equalityOpParser;
@property (nonatomic, retain) PKCollectionParser *shiftOpParser;
@property (nonatomic, retain) PKCollectionParser *incrementOpParser;
@property (nonatomic, retain) PKCollectionParser *unaryOpParser;
@property (nonatomic, retain) PKCollectionParser *multiplicativeOpParser;

@property (nonatomic, retain) PKCollectionParser *programParser;
@property (nonatomic, retain) PKCollectionParser *elementParser;
@property (nonatomic, retain) PKCollectionParser *funcParser;
@property (nonatomic, retain) PKCollectionParser *paramListOptParser;
@property (nonatomic, retain) PKCollectionParser *paramListParser;
@property (nonatomic, retain) PKCollectionParser *commaIdentifierParser;
@property (nonatomic, retain) PKCollectionParser *compoundStmtParser;
@property (nonatomic, retain) PKCollectionParser *stmtsParser;
@property (nonatomic, retain) PKCollectionParser *stmtParser;
@property (nonatomic, retain) PKCollectionParser *ifStmtParser;
@property (nonatomic, retain) PKCollectionParser *ifElseStmtParser;
@property (nonatomic, retain) PKCollectionParser *whileStmtParser;
@property (nonatomic, retain) PKCollectionParser *forParenStmtParser;
@property (nonatomic, retain) PKCollectionParser *forBeginStmtParser;
@property (nonatomic, retain) PKCollectionParser *forInStmtParser;
@property (nonatomic, retain) PKCollectionParser *breakStmtParser;
@property (nonatomic, retain) PKCollectionParser *continueStmtParser;
@property (nonatomic, retain) PKCollectionParser *withStmtParser;
@property (nonatomic, retain) PKCollectionParser *returnStmtParser;
@property (nonatomic, retain) PKCollectionParser *variablesOrExprStmtParser;
@property (nonatomic, retain) PKCollectionParser *conditionParser;
@property (nonatomic, retain) PKCollectionParser *forParenParser;
@property (nonatomic, retain) PKCollectionParser *forBeginParser;
@property (nonatomic, retain) PKCollectionParser *variablesOrExprParser;
@property (nonatomic, retain) PKCollectionParser *varVariablesParser;
@property (nonatomic, retain) PKCollectionParser *variablesParser;
@property (nonatomic, retain) PKCollectionParser *commaVariableParser;
@property (nonatomic, retain) PKCollectionParser *variableParser;
@property (nonatomic, retain) PKCollectionParser *assignmentParser;
@property (nonatomic, retain) PKCollectionParser *exprOptParser;
@property (nonatomic, retain) PKCollectionParser *exprParser;
@property (nonatomic, retain) PKCollectionParser *commaAssignmentExprParser;
@property (nonatomic, retain) PKCollectionParser *assignmentExprParser;
@property (nonatomic, retain) PKCollectionParser *assignmentOpConditionalExprParser;
@property (nonatomic, retain) PKCollectionParser *conditionalExprParser;
@property (nonatomic, retain) PKCollectionParser *ternaryExprParser;
@property (nonatomic, retain) PKCollectionParser *orExprParser;
@property (nonatomic, retain) PKCollectionParser *orAndExprParser;
@property (nonatomic, retain) PKCollectionParser *andExprParser;
@property (nonatomic, retain) PKCollectionParser *andBitwiseOrExprParser;
@property (nonatomic, retain) PKCollectionParser *bitwiseOrExprParser;
@property (nonatomic, retain) PKCollectionParser *pipeBitwiseXorExprParser;
@property (nonatomic, retain) PKCollectionParser *bitwiseXorExprParser;
@property (nonatomic, retain) PKCollectionParser *caretBitwiseAndExprParser;
@property (nonatomic, retain) PKCollectionParser *bitwiseAndExprParser;
@property (nonatomic, retain) PKCollectionParser *ampEqualityExprParser;
@property (nonatomic, retain) PKCollectionParser *equalityExprParser;
@property (nonatomic, retain) PKCollectionParser *equalityOpRelationalExprParser;
@property (nonatomic, retain) PKCollectionParser *relationalExprParser;
@property (nonatomic, retain) PKCollectionParser *relationalOpShiftExprParser;
@property (nonatomic, retain) PKCollectionParser *shiftExprParser;
@property (nonatomic, retain) PKCollectionParser *shiftOpAdditiveExprParser;
@property (nonatomic, retain) PKCollectionParser *additiveExprParser;
@property (nonatomic, retain) PKCollectionParser *plusOrMinusExprParser;
@property (nonatomic, retain) PKCollectionParser *plusExprParser;
@property (nonatomic, retain) PKCollectionParser *minusExprParser;
@property (nonatomic, retain) PKCollectionParser *multiplicativeExprParser;
@property (nonatomic, retain) PKCollectionParser *multiplicativeOpUnaryExprParser;
@property (nonatomic, retain) PKCollectionParser *unaryExprParser;
@property (nonatomic, retain) PKCollectionParser *unaryExpr1Parser;
@property (nonatomic, retain) PKCollectionParser *unaryExpr2Parser;
@property (nonatomic, retain) PKCollectionParser *unaryExpr3Parser;
@property (nonatomic, retain) PKCollectionParser *unaryExpr4Parser;
@property (nonatomic, retain) PKCollectionParser *unaryExpr5Parser;
@property (nonatomic, retain) PKCollectionParser *unaryExpr6Parser;
@property (nonatomic, retain) PKCollectionParser *constructorCallParser;
@property (nonatomic, retain) PKCollectionParser *parenArgListOptParenParser;
@property (nonatomic, retain) PKCollectionParser *memberExprParser;
@property (nonatomic, retain) PKCollectionParser *memberExprExtParser;
@property (nonatomic, retain) PKCollectionParser *dotMemberExprParser;
@property (nonatomic, retain) PKCollectionParser *bracketMemberExprParser;
@property (nonatomic, retain) PKCollectionParser *argListOptParser;
@property (nonatomic, retain) PKCollectionParser *argListParser;
@property (nonatomic, retain) PKCollectionParser *primaryExprParser;
@property (nonatomic, retain) PKCollectionParser *parenExprParenParser;

@property (nonatomic, retain) PKCollectionParser *funcLiteralParser;
@property (nonatomic, retain) PKCollectionParser *arrayLiteralParser;
@property (nonatomic, retain) PKCollectionParser *objectLiteralParser;

@property (nonatomic, retain) PKParser *identifierParser;
@property (nonatomic, retain) PKParser *stringParser;
@property (nonatomic, retain) PKParser *numberParser;

@property (nonatomic, retain) PKParser *ifParser;
@property (nonatomic, retain) PKParser *elseParser;
@property (nonatomic, retain) PKParser *whileParser;
@property (nonatomic, retain) PKParser *forParser;
@property (nonatomic, retain) PKParser *inParser;
@property (nonatomic, retain) PKParser *breakParser;
@property (nonatomic, retain) PKParser *continueParser;
@property (nonatomic, retain) PKParser *withParser;
@property (nonatomic, retain) PKParser *returnParser;
@property (nonatomic, retain) PKParser *varParser;
@property (nonatomic, retain) PKParser *deleteParser;
@property (nonatomic, retain) PKParser *newParser;
@property (nonatomic, retain) PKParser *thisParser;
@property (nonatomic, retain) PKParser *falseParser;
@property (nonatomic, retain) PKParser *trueParser;
@property (nonatomic, retain) PKParser *nullParser;
@property (nonatomic, retain) PKParser *undefinedParser;
@property (nonatomic, retain) PKParser *voidParser;
@property (nonatomic, retain) PKParser *typeofParser;
@property (nonatomic, retain) PKParser *instanceofParser;
@property (nonatomic, retain) PKParser *functionParser;

@property (nonatomic, retain) PKParser *orParser;
@property (nonatomic, retain) PKParser *andParser;
@property (nonatomic, retain) PKParser *neParser;
@property (nonatomic, retain) PKParser *isNotParser;
@property (nonatomic, retain) PKParser *eqParser;
@property (nonatomic, retain) PKParser *isParser;
@property (nonatomic, retain) PKParser *leParser;
@property (nonatomic, retain) PKParser *geParser;
@property (nonatomic, retain) PKParser *plusPlusParser;
@property (nonatomic, retain) PKParser *minusMinusParser;
@property (nonatomic, retain) PKParser *plusEqParser;
@property (nonatomic, retain) PKParser *minusEqParser;
@property (nonatomic, retain) PKParser *timesEqParser;
@property (nonatomic, retain) PKParser *divEqParser;
@property (nonatomic, retain) PKParser *modEqParser;
@property (nonatomic, retain) PKParser *shiftLeftParser;
@property (nonatomic, retain) PKParser *shiftRightParser;
@property (nonatomic, retain) PKParser *shiftRightExtParser;
@property (nonatomic, retain) PKParser *shiftLeftEqParser;
@property (nonatomic, retain) PKParser *shiftRightEqParser;
@property (nonatomic, retain) PKParser *shiftRightExtEqParser;
@property (nonatomic, retain) PKParser *andEqParser;
@property (nonatomic, retain) PKParser *xorEqParser;
@property (nonatomic, retain) PKParser *orEqParser;

@property (nonatomic, retain) PKParser *openCurlyParser;
@property (nonatomic, retain) PKParser *closeCurlyParser;
@property (nonatomic, retain) PKParser *openParenParser;
@property (nonatomic, retain) PKParser *closeParenParser;
@property (nonatomic, retain) PKParser *openBracketParser;
@property (nonatomic, retain) PKParser *closeBracketParser;
@property (nonatomic, retain) PKParser *commaParser;
@property (nonatomic, retain) PKParser *dotParser;
@property (nonatomic, retain) PKParser *semiOptParser;
@property (nonatomic, retain) PKParser *semiParser;
@property (nonatomic, retain) PKParser *colonParser;
@property (nonatomic, retain) PKParser *equalsParser;
@property (nonatomic, retain) PKParser *notParser;
@property (nonatomic, retain) PKParser *ltParser;
@property (nonatomic, retain) PKParser *gtParser;
@property (nonatomic, retain) PKParser *ampParser;
@property (nonatomic, retain) PKParser *pipeParser;
@property (nonatomic, retain) PKParser *caretParser;
@property (nonatomic, retain) PKParser *tildeParser;
@property (nonatomic, retain) PKParser *questionParser;
@property (nonatomic, retain) PKParser *plusParser;
@property (nonatomic, retain) PKParser *minusParser;
@property (nonatomic, retain) PKParser *timesParser;
@property (nonatomic, retain) PKParser *divParser;
@property (nonatomic, retain) PKParser *modParser;
@end
